﻿Imports System.Data.SqlServerCe
Imports Validaciones.Validar
Imports Validaciones
Imports System.IO

Public Class Usuarios
    Public conexion As New SqlCeConnection("Data Source=|DataDirectory|\NuevoZooDB.sdf")
    Public adapter As New SqlCeDataAdapter("Select * from Usuarios", conexion)
    Public midataset As New DataSet




    Private Sub Usuarios_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load



        adapter.Fill(midataset, "Usuarios")
        DataGridView2.DataSource = midataset
        DataGridView2.DataMember = "Usuarios"

        DataGridView1.DataSource = midataset
        DataGridView1.DataMember = "Usuarios"

        DataGridView3.DataSource = midataset
        DataGridView3.DataMember = "Usuarios"

        DataGridView4.DataSource = midataset
        DataGridView4.DataMember = "Usuarios"

        'Bindeo los datos a los textbox de la pestaña para consultar usuarios
        TCid.DataBindings.Add("text", midataset, "Usuarios.ID")
        TCnombre.DataBindings.Add("text", midataset, "Usuarios.Nombre")
        TCusuario.DataBindings.Add("text", midataset, "Usuarios.Usuario")
        TCpass.DataBindings.Add("text", midataset, "Usuarios.Password")
        TCdni.DataBindings.Add("text", midataset, "Usuarios.DNI")
        TCtelefono.DataBindings.Add("text", midataset, "Usuarios.Telefono")
        TCdireccion.DataBindings.Add("text", midataset, "Usuarios.Direccion")
        checkcencarg.DataBindings.Add("checked", midataset, "Usuarios.Encargado")

        'Bindeo los datos a los textbox de la pestaña para modificar usuarios
        TEditID.DataBindings.Add("text", midataset, "Usuarios.ID")
        TEditnomnbre.DataBindings.Add("text", midataset, "Usuarios.Nombre")
        TEdituser.DataBindings.Add("text", midataset, "Usuarios.Usuario")
        Teditpass.DataBindings.Add("text", midataset, "Usuarios.Password")
        TEditDNI.DataBindings.Add("text", midataset, "Usuarios.DNI")
        TEdittlf.DataBindings.Add("text", midataset, "Usuarios.Telefono")
        TEditdireccion.DataBindings.Add("text", midataset, "Usuarios.Direccion")
        Checkeditencargado.DataBindings.Add("checked", midataset, "Usuarios.Encargado")

        'Bindeo los datos a los textbox de la pestaña para eliminar registros
        TBid.DataBindings.Add("text", midataset, "Usuarios.ID")
        TBnombre.DataBindings.Add("text", midataset, "Usuarios.Nombre")
        TBuser.DataBindings.Add("text", midataset, "Usuarios.Usuario")
        TBpass.DataBindings.Add("text", midataset, "Usuarios.Password")
        TBdni.DataBindings.Add("text", midataset, "Usuarios.DNI")
        TBtlf.DataBindings.Add("text", midataset, "Usuarios.Telefono")
        TBdir.DataBindings.Add("text", midataset, "Usuarios.Direccion")
        checkBenc.DataBindings.Add("checked", midataset, "Usuarios.Encargado")


    End Sub

    Private Sub Usuarios_Move(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Move
        Me.CenterToScreen()

    End Sub


    Private Sub BMeteremp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BMeteremp.Click
        If TMeternombre.Text = "" Or TmeterApellidos.Text = "" Or TmeterDireccion.Text = "" Or TmeterDni.Text = "" Or Tmeterpass.Text = "" Or TMeterTelefono.Text = "" Then
            MsgBox("Debe rellenar todos los campos" & Chr(13) & "para dar de alta a un usuario", , "Error")
        ElseIf Login.validar.ValidarNombre(TMeternombre.Text) <> 3 Then
            MsgBox("El campo 'Nombre' es incorrecto", , "Error")
        ElseIf Login.validar.ValidarNombre(TmeterApellidos.Text) <> 3 Then
            MsgBox("El campo 'Apellidos' es incorrecto", , "Error")
        ElseIf Login.validar.ValidarTlf(TMeterTelefono.Text) <> 3 Then
            MsgBox("El campo 'Teléfono' es incorrecto", , "Error")
        ElseIf Login.validar.ValidarDNI(TmeterDni.Text) <> 3 Then
            MsgBox("El campo 'DNI' es incorrecto", , "Error")
        ElseIf Tmeterpass.Text.Length < 4 Then
            MsgBox("La contraseña debe tener entre 4 y 8 caracteres", , "Error")
        Else
            'Creamos el nombre de usuario automáticamente
            Dim usuario As String
            usuario = (TMeternombre.Text.Substring(0, 3) & TmeterApellidos.Text.Substring(0, 3)).ToUpper
            'Comprobamos si va a ser encargado o no
            Dim encargado As Boolean
            If checkencargado.Checked Then
                encargado = True
            End If

            'Generamos una nueva ID
            Dim query As IEnumerable(Of Decimal) = _
                    From item As DataGridViewRow In DataGridView2.Rows.Cast(Of DataGridViewRow)() _
                    Where item.Cells(0).Value IsNot DBNull.Value _
                    Select CDec(item.Cells(0).Value)

            ' Obtenemos el valor máximo
            '
            Dim id As Integer = query.ToList.Max() + 1

            'Introducimos el nuevo usuario en la db
            Dim comando = New SqlCeCommand("Insert into Usuarios values (@ID, @nombre, @usuario, @password, @telefono, @direccion, @encargado, @DNI)", conexion)
            comando.Parameters.AddWithValue("@ID", id)
            comando.Parameters.AddWithValue("@nombre", (TMeternombre.Text & " " & TmeterApellidos.Text))
            comando.Parameters.AddWithValue("@usuario", usuario)
            comando.Parameters.AddWithValue("@password", Tmeterpass.Text)
            comando.Parameters.AddWithValue("@DNI", TmeterDni.Text)
            comando.Parameters.AddWithValue("@telefono", TMeterTelefono.Text)
            comando.Parameters.AddWithValue("@direccion", TmeterDireccion.Text)
            comando.Parameters.AddWithValue("@encargado", encargado)

            conexion.Open()
            comando.ExecuteNonQuery()
            conexion.Close()
            midataset.Clear()
            adapter.Fill(midataset, "Usuarios")
            DataGridView2.DataSource = midataset
            DataGridView2.DataMember = "Usuarios"

            'Mandamos cada cambio a un txt
            Using writer As New StreamWriter("D:\log.txt", True)
                writer.WriteLine("El usuario " & Login.usuariologin.ToUpper & " ha añadido un registro de usuario de DNI " & TmeterDni.Text & ".   " & DateTime.Now)
            End Using

            'Aviso de creación de nuevo usuario con los datos de login
            MsgBox("Se ha creado un nuevo usuario con los siguientes datos:" & Chr(13) & "      Usuario: " & usuario & Chr(13) & "      Contraseña: " & Tmeterpass.Text, MsgBoxStyle.OkOnly, "Nuevo usuario")
            'Borramos todos los campos al añadir algo nuevo
            Limpiarannadir()
        End If



    End Sub

    Private Sub BLimpiarmeteremp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BLimpiarmeteremp.Click
        'Limpio todos los campos
        Limpiarannadir()
    End Sub


    Private Sub Limpiarannadir()
        TmeterApellidos.Text = ""
        TmeterDireccion.Text = ""
        TmeterDni.Text = ""
        TMeternombre.Text = ""
        Tmeterpass.Text = ""
        TMeterTelefono.Text = ""
        checkencargado.Checked = False
    End Sub


    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        midataset.Clear()
        adapter.Fill(midataset, "Usuarios")
        DataGridView2.DataSource = midataset
        DataGridView2.DataMember = "Usuarios"

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim res As Integer
        Dim comando As New SqlCeCommand("Delete from Usuarios where ID=@id", conexion)
        comando.Parameters.AddWithValue("@id", TBid.Text)
        res = MsgBox("¿Está seguro de que desea eliminar el usuario " & TBnombre.Text, 20, "Aviso")
        If res = 6 Then
            'Mandamos cada cambio a un txt
            Using writer As New StreamWriter("log.txt", True)
                writer.WriteLine("El usuario " & Login.usuariologin.ToUpper & " ha eliminado un registro de usuario de DNI " & TBdni.Text & ".   " & DateTime.Now)
            End Using
            conexion.Open()
            comando.ExecuteNonQuery()
            conexion.Close()
            midataset.Clear()
            adapter.Fill(midataset, "Usuarios")
            DataGridView4.DataSource = midataset
            DataGridView4.DataMember = "Usuarios"
        End If
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

        If TEditdireccion.Text = "" Or TEdittlf.Text = "" Or Teditpass.Text = "" Then
            MsgBox("Deber rellenar todos los campos antes de actualizar el registro de un usuario", , "Error")
        ElseIf Login.validar.ValidarTlf(TEdittlf.Text) <> 3 Then
            MsgBox("El nuevo teléfono introducido no es correcto", , "Error")
        ElseIf Teditpass.Text.Length < 4 Then
            MsgBox("La contraseña debe tener entre 4 y 8 caracteres", , "Error")
        Else
            Dim encargado As Boolean
            If Checkeditencargado.Checked Then
                encargado = True
            End If
            Dim id As Integer
            id = CType(TEditID.Text, Integer)
            Dim comando = New SqlCeCommand("Update Usuarios set Telefono=@telefono, Direccion=@direccion, Password=@password, Encargado=@encargado where ID=@ID", conexion)
            comando.Parameters.AddWithValue("@ID", id)
            comando.Parameters.AddWithValue("@password", Teditpass.Text)
            comando.Parameters.AddWithValue("@telefono", TEdittlf.Text)
            comando.Parameters.AddWithValue("@direccion", TEditdireccion.Text)
            comando.Parameters.AddWithValue("@encargado", encargado)

            'Mandamos cada cambio a un txt
            Using writer As New StreamWriter("log.txt", True)
                writer.WriteLine("El usuario " & Login.usuariologin.ToUpper & " ha modificado un registro de usuario de DNI " & TCdni.Text & ".   " & DateTime.Now)
            End Using

            conexion.Open()
            comando.ExecuteNonQuery()
            conexion.Close()
            midataset.Clear()
            adapter.Fill(midataset, "Usuarios")
            DataGridView2.DataSource = midataset
            DataGridView2.DataMember = "Usuarios"
        End If
        
    End Sub



    'CON ESTO SELECCIONAMOS EN FUNCION DE SI SON EMPLEADOS O NO
    Private Sub Combotipouser_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Combotipouser.SelectedIndexChanged
        Busquedacombo(DataGridView1, Combotipouser)
    End Sub
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        Busquedacombo(DataGridView3, ComboBox1)
    End Sub
    Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
        Busquedacombo(DataGridView4, ComboBox2)
    End Sub

    Sub Busquedacombo(ByVal dg As DataGridView, ByVal cb As ComboBox)
        Dim comando As New SqlCeCommand
        Dim encargado As Boolean

        If cb.Text = "Todos" Then
            comando = New SqlCeCommand("Select * from Usuarios", conexion)
        Else
            If cb.Text = "Encargados" Then
                encargado = True
                comando = New SqlCeCommand("Select * from Usuarios where Encargado = @enc", conexion)
                comando.Parameters.AddWithValue("@enc", encargado)
            ElseIf cb.Text = "Empleados" Then
                encargado = False
                comando = New SqlCeCommand("Select * from Usuarios where Encargado = @enc", conexion)
                comando.Parameters.AddWithValue("@enc", encargado)
            End If

        End If
        adapter.SelectCommand = comando
        midataset.Clear()
        adapter.Fill(midataset, "Usuarios")
        dg.DataSource = midataset
    End Sub

    Private Sub Tbuscachar_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tbuscachar.TextChanged
        Busquedatexto(DataGridView1, Tbuscachar)
    End Sub
    Private Sub TextBox18_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox18.TextChanged
        Busquedatexto(DataGridView3, TextBox18)
    End Sub
    Private Sub TextBox7_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox7.TextChanged
        Busquedatexto(DataGridView4, TextBox7)
    End Sub


    Sub Busquedatexto(ByVal dg As DataGridView, ByVal txt As TextBox)
        Dim comando = New SqlCeCommand(("Select * from Usuarios where Nombre like '%" & txt.Text & "%'"), conexion)
        adapter.SelectCommand = comando
        midataset.Clear()
        adapter.Fill(midataset, "Usuarios")
        dg.DataSource = midataset
    End Sub

    Private Sub NuevoToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NuevoToolStripMenuItem.Click
        Consultar.SelectedIndex = 1
    End Sub

    Private Sub EditarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EditarToolStripMenuItem.Click
        Consultar.SelectedIndex = 2
    End Sub

    Private Sub EliminarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EliminarToolStripMenuItem.Click
        Consultar.SelectedIndex = 3
    End Sub

    Private Sub SalirToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SalirToolStripMenuItem.Click
        Me.Close()
    End Sub

    Private Sub WebsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles WebsToolStripMenuItem.Click
        Webs.Show()
    End Sub

    Private Sub Consultar_Selecting(ByVal sender As Object, ByVal e As System.Windows.Forms.TabControlCancelEventArgs) Handles Consultar.Selecting
        Tbuscachar.Text = ""
        Combotipouser.SelectedItem = "Todos"
        TextBox18.Text = ""
        ComboBox1.SelectedItem = "Todos"
        TextBox7.Text = ""
        ComboBox2.SelectedItem = "Todos"
    End Sub

    Private Sub AyudaToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AyudaToolStripMenuItem1.Click
        Dim rutaEjecutable As String = System.IO.Directory.GetCurrentDirectory().ToString
        System.Diagnostics.Process.Start(rutaEjecutable & "\Ayuda.chm")
    End Sub
End Class